package com.weipu.common.facade.model.config;

import android.util.Log;

import com.weipu.common.DXApplication;
import com.weipu.common.util.CacheUtil;

/**
 * 程序全局配置单例
 * 包含缓存、程序基础信息、程序启动相关配置
 */
public final class ConfigUtil
{
    private static final String TAG = ConfigUtil.class.getName();
    
    private static ConfigUtil inst = new ConfigUtil();//单实例对象
    
    private Config config;
    
    public static ConfigUtil getInstance()
    {
        return inst;
    }
    
    private ConfigUtil()
    {
        //TODO 通过可配置替换
        config = new Config();
        
        //【缓存相关配置】
        //缓存相关配置由CacheUtil控制 ，请见updateCacheCfg(CacheConfigModel model)
        //        CacheConfigModel cacheConfig = new CacheConfigModel();
        //        cacheConfig.setEnableCache(true);
        //        config.setCacheConfig(cacheConfig);
        
        //【启动相关】
        StartupConfig startupCfg = new StartupConfig();
        startupCfg.setStartupDelay(3000);//延迟3秒加载
        startupCfg.setEnablePreLoadCategory(true);//允许栏目预加载
        startupCfg.setEnablePreLoadProduct(true);//允许产品预加载
        config.setStartupConfig(startupCfg);
        
        //【程序App相关配置】
        AppInfoConfig appInfo = new AppInfoConfig();
        appInfo.setAppDownloadUrl("https://play.google.com/store/apps/details?id="
            + DXApplication.getContext().getPackageName());
        config.setAppInfoConfig(appInfo);
        //---------------------  以下代码 unused 屏蔽 ------------------------------------//
        //【服务端配置信息】
        //        if (config.getServerVersion() == 1)
        //        {
        //            updateServerConfig();
        //        }
        //        else
        //        {
        //            ServerConfig serverCfg = new ServerConfig();
        //            AddressCfg addressCfg = new AddressCfg();
        //            
        //            addressCfg.setBaseUrl("https://dms.dx.com/svc/v1.0/api/");
        //            addressCfg.setFaqUrl("https://dms.dx.com/Appweb/v1.0/Faq.htm");
        //            addressCfg.setShippingAddressUrl("https://dms.dx.com/Appweb/v1.0/PaypalFrom.aspx");
        //            
        //            AuthenticateCfg ahthenticate = new AuthenticateCfg();
        //            ahthenticate.setAccount("ipad.apps.dx.com");
        //            ahthenticate.setPassword("Zzs_D1d%FhGQf7Y");
        //            
        //            serverCfg.setAddressCfg(addressCfg);
        //            serverCfg.setAhthenticate(ahthenticate);
        //            
        //            config.setServerConfig(serverCfg);
        //        }
        
        //【日志配置信息】
        LogConfig logConfig = new LogConfig();
        //允许日志分析/监控
        logConfig.setEnableMonitor(true);
        config.setLogConfig(logConfig);
        
        Log.d(TAG, "Config.init: " + config);
        
    }
    
    //---------------------  以下代码 unused 屏蔽 ------------------------------------//
    /**
     * 读取Assert目录下server-config.xml服务器配置信息
     * 更新程序服务端配置信息
     * @return
     */
    //    public ServerConfig updateServerConfig()
    //    {
    //        ServerConfig serverCfg = null;
    //        
    //        //文件流
    //        InputStream inputStream = null;
    //        
    //        try
    //        {
    //            //解析配置文件为指定Java Bean
    //            Serializer persister = new Persister();
    //            
    //            //FIXME 完成服务端信息本地可配置化
    //            inputStream =
    //                new BufferedInputStream(DXApplication.getContext().getAssets().open("config/server-config.xml"),
    //                    8 * 1024);
    //            
    //            if (null != inputStream)
    //            {
    //                serverCfg = persister.read(ServerConfig.class, inputStream);
    //            }
    //            
    //        }
    //        catch (Exception e)
    //        {
    //            Logger.w(TAG, "readlocalServerConfig error.", e);
    //        }
    //        finally
    //        {
    //            if (null != inputStream)
    //            {
    //                try
    //                {
    //                    inputStream.close();
    //                }
    //                catch (IOException e)
    //                {
    //                    Logger.w(TAG, "readlocalServerConfig close error.", e);
    //                }
    //            }
    //        }
    //        
    //        config.setServerConfig(serverCfg);
    //        
    //        return serverCfg;
    //    }
    
    /**
     * 更新程序缓存配置信息
     * @param model
     * @return
     */
    public ConfigUtil updateCacheCfg(CacheConfigModel model)
    {
        if (null != model)
        {
            config.setCacheConfig(model);
            
            //更新CacheUtil相关
            CacheUtil.getInstance().updateConfig(model);
        }
        return this;
    }
    
    public Config getConfig()
    {
        return config;
    }
    
}
